/* 
 * @(#)PhylumDaoImpl.java 
 *  
 * Clase de implementacion del DAO de phylum.  
 * 
 * @version 1.0
 * @date 01/11/12 
 * @author Nelson Chicas 
 *  
 */
package muhnes.sizoo.dal;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import muhnes.sizoo.modelo.Phylum;
import muhnes.sizoo.HibernateUtilZoologia;
import org.hibernate.FlushMode;

/**
 * Clase que implementa los metodos definidos en PhylumDao
 * @author Ricardo Orellana
 */
public class PhylumDaoImpl extends GenericoDAO< Phylum, Integer > 
                           implements PhylumDao{
        
    public PhylumDaoImpl() {
        super( HibernateUtilZoologia.getSessionFactory() );
    }
    
    @Override
    protected Class<?> getClaseEntidad () {
        return Phylum.class;
    }
    
    /**
     * Metodo que devuelve una lista de phylum de los animales que se encuentran habilitados
     * 
     */
    @Override
    public List< Phylum > buscarHabilitados () {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Phylum where habilitado = 'true' ";
        Query consulta = sesion.createQuery( hql );
        List< Phylum > entidades = consulta.list();
        return entidades;
    }

    /**
     * Método que verifica que el phylum no se repita
     *  
     */
    @Override
    public boolean verificarUnicidad(Phylum entidad) {
        Session sesion = fabricaSesion.getCurrentSession();      
        String hql = "from Phylum where codigophylum != :codigo " +
                     "and upper(nombre) = :nombre";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo", entidad.getCodigophylum());
        consulta.setParameter("nombre", entidad.getNombre().toUpperCase());
        return consulta.uniqueResult() != null ? true : false;
    }
    
     /**
     * Método que verifica que la entidad sea independiente de otras entidades.
     *  
     */
    @Override
    public boolean verificarDependencia (Phylum entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Clase where phylum.codigophylum = :codigo";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigophylum());
        return !consulta.list().isEmpty();
    }

}
